import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public static void main(String[] args) {
    // 自动装箱
    Byte b1 = 127;
    Byte b2 = 127;
    System.out.println(b1);
    System.out.println(b1 == b2);
    System.out.println(b1.equals(b2));

    Byte aByte = Byte.valueOf("127");
    System.out.println(aByte.equals(b1));

    byte b = 127; // b 是基本数据类型，直接是一个数字，不是一个对象
    Byte b3 = 127; // b3 是引用类型，是一个对象，b3 变量存储的是对象的内存地址
    System.out.println(b3 == b);    // true

    short s = 255;
    int i = 127;
    long l = 127;
    float f = 127;
    double d = 127;
    char c = 'a';
    boolean bool = true;

    List<Integer> arrayList = new ArrayList<>();
    // 自动装箱，将数字字面量转换成 Integer 对象
    arrayList.add(127);
    arrayList.add(127);
    arrayList.add(128);
    arrayList.add(126);
    System.out.println(arrayList);

    // 基本类型包装类的缓存池，整数类型都是 -128 ~ 127，字符类型是 0 ~ 127，
    // 布尔类型缓存池中只有 true 和 false，两个浮点类型没有缓存池
    Integer i1 = arrayList.get(0);
    Integer i2 = arrayList.get(1);
    System.out.println(i1 == i2);

    Integer i3 = arrayList.get(2);
    Integer i4 = arrayList.get(3);
    System.out.println(i3 == i4);

    arrayList.add(-128);
    arrayList.add(-128);
    System.out.println(arrayList.get(4) == arrayList.get(5));

    arrayList.add(-129);
    arrayList.add(-129);
    System.out.println(arrayList.get(6) == arrayList.get(7));


    Character c1 = 66, c2 = 66;
    System.out.println(c1 == c2);


    Float aFloat = 127f, bFloat = 127f;
    System.out.println(aFloat == bFloat);

    BigDecimal.valueOf(10.0);

    System.out.println(0.1 + 0.2);


    long minValue = Long.MIN_VALUE;
    System.out.println(minValue -1);
    long maxValue = Long.MAX_VALUE;
    System.out.println(maxValue);
}